package testes;

import static org.junit.Assert.*;



import java.util.HashSet;
import java.util.Set;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.quasar.copaPaises.businessLayer.*;
public class ParticipanteTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
		 CalendarDate.allInstances.clear();
		  Campeonato.allInstances.clear();
		  Cartao.allInstances.clear();
		  Cidade.allInstances.clear();
		  Clube.allInstances.clear();
		  Continente.allInstances.clear();
		  Equipa.allInstances.clear();
		  Estadio.allInstances.clear();
		  Golo.allInstances.clear();
		  Grupo.allInstances.clear();
		  Jogador.allInstances.clear();
		  Jogo.allInstances.clear();
		  Membro.allInstances.clear();
		  Pais.allInstances.clear();
		  Participacao.allInstances.clear();
		  Participante.allInstances().clear();
		  Treinador.allInstances.clear();
	}

	@After
	public void tearDown() throws Exception {
		 CalendarDate.allInstances.clear();
		  Campeonato.allInstances.clear();
		  Cartao.allInstances.clear();
		  Cidade.allInstances.clear();
		  Clube.allInstances.clear();
		  Continente.allInstances.clear();
		  Equipa.allInstances.clear();
		  Estadio.allInstances.clear();
		  Golo.allInstances.clear();
		  Grupo.allInstances.clear();
		  Jogador.allInstances.clear();
		  Jogo.allInstances.clear();
		  Membro.allInstances.clear();
		  Pais.allInstances.clear();
		  Participacao.allInstances.clear();
		  Participante.allInstances().clear();
		  Treinador.allInstances.clear();
	}

	@Test
	public final void testAllInstances() {
		
		Set<Participante> participantes = Participante.allInstances();
		assertTrue(participantes.size()==0);
		
		Jogador j1 = new Jogador();
		Jogador j2 = new Jogador();
		Jogador j3 = new Jogador();
		Jogador j4 = new Jogador();
		Jogador j5 = new Jogador();
		Treinador t1 = new Treinador();
		Treinador t2 = new Treinador();
		Treinador t3 = new Treinador();
		participantes = Participante.allInstances();
		assertTrue(participantes.size()==8);
		assertTrue(participantes.contains(j1));
		assertTrue(participantes.contains(j2));
		assertTrue(participantes.contains(j3));
		assertTrue(participantes.contains(j4));
		assertTrue(participantes.contains(j5));
		assertTrue(participantes.contains(t1));
		assertTrue(participantes.contains(t2));
		assertTrue(participantes.contains(t3));
		
	}

	@Test
	public final void testParticipante() {
		//Participante participante = new Participante();
		//assertNotNull(participante);
	}

	@Test
	public final void testParticipanteCalendarDateStringPais() {
		//CalendarDate date = new CalendarDate();
		//String nome = "Eusebio";
		//Pais pais = new Pais();
		//Participante participante = new Participante(date,nome,pais);
		
		
		
	}

	@Test
	public final void testData_nascimento() {
		CalendarDate data1 = new CalendarDate();
		CalendarDate data2 = new CalendarDate();
		Jogador jogador = new Jogador(data1, null, null, null, null);
		Treinador treinador = new Treinador(data2, null, null);
		for(Participante p :Participante.allInstances()){
		
			if (p.equals(jogador))
				assertEquals(p.data_nascimento(),data1);
			if (p.equals(treinador))
				assertEquals(p.data_nascimento(),data2);		
		}
				
			
	}

	@Test
	public final void testSetData_nascimento() {
		CalendarDate data1 = new CalendarDate();
		CalendarDate data2 = new CalendarDate();
		Jogador jogador = new Jogador();
		Treinador treinador = new Treinador();
		
		for(Participante p :Participante.allInstances()){
			if (p.equals(jogador))
				p.setData_nascimento(data1);
			if (p.equals(treinador))
				p.setData_nascimento(data2);
		}
		
		for(Participante p :Participante.allInstances()){
			if (p.equals(jogador))
				assertEquals(p.data_nascimento(),data1);
			if (p.equals(treinador))
				assertEquals(p.data_nascimento(),data2);		
		}
	}

	@Test
	public final void testNome() {
		String nome1 = "Eusebio";
		String nome2 = "Olegario";
		Jogador jogador = new Jogador(null, nome1, null, null, null);
		Treinador treinador = new Treinador(null,nome2, null);
		for(Participante p :Participante.allInstances()){
			if (p.equals(jogador))
				assertEquals(p.nome(),nome1);
			if (p.equals(treinador))
				assertEquals(p.nome(),nome2);		
		}
	}

	@Test
	public final void testSetNome() {
		String nome1 = "Eusebio";
		String nome2 = "Olegario";
		Jogador jogador = new Jogador();
		Treinador treinador = new Treinador();
		for (Participante p: Participante.allInstances()){
			if (p.equals(jogador))
				p.setNome(nome1);
			if (p.equals(treinador))
				p.setNome(nome2);
		}
		for(Participante p :Participante.allInstances()){
			if (p.equals(jogador))
				assertEquals(p.nome(),nome1);
			if (p.equals(treinador))
				assertEquals(p.nome(),nome2);		
		}
	}

	@Test
	public final void testNacionalidade() {
		Pais pais1 = new Pais();
		Pais pais2 = new Pais();
		Jogador jogador = new Jogador(null,null,pais1, null, null);
		Treinador treinador = new Treinador(null,null,pais2);
		for(Participante p :Participante.allInstances()){
			if (p.equals(jogador)){
				assertEquals(p.nacionalidade(),pais1);
			}
			if (p.equals(treinador))
				assertEquals(p.nacionalidade(),pais2);
		}
	}

	@Test
	public final void testSetNacionalidade() {
		Pais pais1 = new Pais();
		Pais pais2 = new Pais();
		Jogador jogador = new Jogador();
		Treinador treinador = new Treinador();
		for (Participante p: Participante.allInstances()){
			if (p.equals(jogador))
				p.setNacionalidade(pais1);
			if (p.equals(treinador))
				p.setNacionalidade(pais2);
		}
		for(Participante p :Participante.allInstances()){
			if (p.equals(jogador))
				assertEquals(p.nacionalidade(),pais1);
			if (p.equals(treinador))
				assertEquals(p.nacionalidade(),pais2);	
		}
	}

	@Test
	public final void testIdadeNaData() {
		CalendarDate nascimento = new CalendarDate(23,05,1984);
		CalendarDate data1 = new CalendarDate(24,05,2012);
		CalendarDate data2 = new CalendarDate(22,05,2012);
		Jogador jogador = new Jogador();
		jogador.setData_nascimento(nascimento);
		for (Participante p : Participante.allInstances())
			if (p.equals(jogador)){
				assertTrue(p.idadeNaData(data1)==27);
				assertTrue(p.idadeNaData(data2)==28);
			}
		
	}

	@Test
	public final void testToString() {
		Jogador j = new Jogador();
		Participante participante = null;
		for (Participante p: Participante.allInstances())
			participante = p;
		String toString = "Jogador [posicao=null, clube=null]\n";
		assertEquals(toString,participante.toString());
		
	}

}
